Skip to content

Release 0.4.10 - #320

Merged
ZhuchkaTriplesix merged 82 commits into
mainfrom
release/0.4.10
Jul 11, 2026
Merged

Release 0.4.10#320
ZhuchkaTriplesix merged 82 commits into
mainfrom
release/0.4.10

Conversation

@ZhuchkaTriplesix

Copy link
Copy Markdown
Member

Summary

Release 0.4.10 — sandboxed extension runtime, SDUI, external database driver Registration/Activation, and in-app updates.

What's included

Release checklist

  • CHANGELOG.md updated for 0.4.10
  • pubspec.yaml version bumped to 0.4.10+1
  • CI green on this PR
  • After merge: create annotated git tag 0.4.10 to trigger the Release workflow

ZhuchkaTriplesix and others added 30 commits July 10, 2026 14:16
- Update macos/Runner/Release.entitlements for hardened runtime
  (non-App-Store Developer ID distribution) without App Sandbox.
- Add optional Sign and notarize macOS app step to release.yml.
  Runs only when MACOS_SIGN_IDENTITY and MACOS_NOTARY_KEY secrets are set.
- Rewrite docs/macos-signing.md with full setup guide.

When Apple Developer secrets are configured, future releases will produce
a signed, notarized, and stapled macOS .app that opens with a double-click.
…nged

- Revert macos/Runner/Release.entitlements to the original Flutter default
  (App Sandbox enabled). This keeps unsigned macOS builds exactly as before.
- Add macos/Runner/ReleaseSigned.entitlements for use only when CI signs
  the app with a Developer ID certificate (hardened runtime, no sandbox).
- Update the signing step in release.yml to use ReleaseSigned.entitlements.
- Update docs/Obsidian notes to describe the two-file approach.

Signing remains optional: the step runs only when the required Apple
Developer secrets are configured. Until then, releases continue to produce
unsigned macOS zips as they did before.
fix(core): disconnect SQLite service inside disconnectAllExternalServices on app shutdown
…t/port (#273)

- Add sslRootCert, sslCert, sslKey fields to PostgresConnection and
  extract them from connectionString query parameters in fromConnectionRow.
- Build a SecurityContext in _buildSettings() when any certificate path is
  present and pass it to ConnectionSettings.
- For URI-based connections, fall back to the extracted SecurityContext when
  the parsed URI does not provide one.
- Forward SSL certificate parameters in connectToDatabase() so database-switch
  connections keep the same certs.
- Pass the certificate paths from the form to the temporary PostgresConnection
  used for testConnection().
- Add tests covering extraction, preservation, and actual use during connect()
  for host/port mode.
…t/port (#273)

fix(postgresql): pass SSL client certificates when connecting via host/port (#273)
…275)

- Add PoolEntryLock to coalesce concurrent createIfAbsent calls for the
  same pool key so only one underlying connection is created.
- Use the lock in PostgresConnectionPool, MysqlConnectionPool, and
  SqliteConnectionPool acquire() paths.
- Increment refs after the shared creation future completes so racing
  callers share the same connection without orphaned sockets.
- Add concurrent-acquire tests for PostgresConnectionPool.
…275)

fix(connections): serialize concurrent pool acquire for the same key (#275)
…tore failures (#276)

- removeConnection always deletes the SQLite row even if secure-store
  delete fails (e.g. missing key or unavailable libsecret).
- addConnection rolls back the SQLite insert (and any partial secrets)
  when writing to the OS secure store fails.
- updateConnection restores the previous SQLite row and previous secrets
  when a secure-store write fails, then rethrows the original error.
- Extend the in-memory secrets backend with failNextWrite/failNextDelete
  hooks and cover the failure paths with unit tests.
…micity

fix(storage): keep connection metadata and secrets consistent on OS store failures (#276)
…te (#277)

- Write CSV to disk via IOSink in writeResultGridCsv instead of assembling
  one giant String before File.writeAsString.
- Add resultGridAsCsvAsync (Isolate.run) and use it for Copy as CSV so large
  grids do not freeze the Flutter UI isolate.
- Rebuild resultGridAsCsv with StringBuffer to reduce intermediate allocations.
- Cover streaming and async paths with unit tests.
fix(csv): stream file export and build clipboard CSV off the UI isolate (#277)
Tokenize SQL outside string literals and comments before splitting on
semicolons so valid queries with ';' in literals are not blocked.
Reject INTO OUTFILE, FOR UPDATE, and other write-side constructs when
they appear outside masked literals/comments.
fix(mysql): harden custom SELECT validation in table browser (#274)
…rage (#272)

Replace silent catch (_) {} blocks with debugPrint so disconnect failures,
stats probe errors, and folder load/migration issues are visible in logs.
fix(core): log swallowed errors in connection drivers and folders storage (#272)
Add sqflite_common_ffi to _driverInfoList so the dialog lists all
supported database drivers, and extend the widget test to assert SQLite.
fix(connections): show SQLite in Driver Manager built-in list (#270)
Replace the noop onPressed handler with a disabled OutlineButton and
tooltip when no execute action is available. Add widget tests for the
hidden empty-state button and the disabled fallback workspace button.
Remove unused onExecute parameter; keep onPressed null with tooltip.
Use a const StatelessWidget and drop unused AnimatedScale import.
fix(ui): disable workspace Execute/Refresh when query cannot run (#266)
…oDB, Redis (#278)

- Add shared SSL certificate URI helpers and form fields (sslrootcert/sslcert/sslkey).
- Extend MySQL, MongoDB, and Redis connection forms with cert file pickers and URI sync.
- Pass SecurityContext in MysqlConnection (vendored mysql_client patch), translate
  Querya SSL params for mongo_dart TLS, and use SecureSocket for Redis rediss://.
- Add unit tests for SSL helpers and driver URI parsing.
Move vendored mysql_client to dependency_overrides and drop unused import.
…o-redis

feat(connections): add SSL client certificate support for MySQL, MongoDB, Redis (#278)
…56 (#280)

Add Phase 1 auto-update core: SemVer version gate, GitHub Releases client,
SHA256 manifest verification on download, and update channel preferences
(stable vs dev) with optional startup background check hook.
feat(core): implement AppUpdaterService with GitHub Releases and SHA256 (#280)
…281)

Wire Phase 2 auto-update UI: Help menu action, UpdateDialog with check/
download/progress states, pulsing title-bar badge via UpdateController,
General preferences toggle, and startup background check hook.
ZhuchkaTriplesix and others added 26 commits July 10, 2026 21:54
Monitor sandboxed plugins with system.ping every 30s, SIGKILL on 5s
pong timeout, and exponential restart backoff (issue #303).
feat(sandbox): Watchdog heartbeat and auto-recovery (#303)
Add Sanitization Pipe for plugin stderr (JWT/PEM/URI/password redaction),
5MB rotating logs under logs/sandbox/, and security_audit.log (issue #304).
…-pipe

feat(sandbox): stderr sanitization pipe and audit log (#304)
Introduce EmbeddedSandboxRuntime with a declarative JSONC engine for SDUI
and SQL helpers, QuickJS/WASM FFI stubs, ExtensionType.script, and allow
installing database drivers that declare a valid process sandbox (#305).
…time

feat(sandbox): Level-1 embedded runtime and preview gate (#305)
Add PluginRpcBridge with handshake, crash fail-over for pending requests,
graceful shutdown, and optional watchdog/stderr pipe wiring (issue #312).
feat(extensions): Block C RPC Protocol Bridge (#312)
Implement Block A SduiFormBuilder (text/number/password/checkbox/select/
file_picker) and SduiTreeBuilder with lazy child loading (issue #314).
feat(ui): Block A SDUI Form and Tree builders (#314)
…ng graceful shutdown and expand edge case tests

- Add _ownsClient flag to SandboxWatchdog to avoid prematurely closing external JsonRpcStdioClient passed from PluginRpcBridge during shutdown()
- Add test verifying enableWatchdog: true allows clean system.shutdown RPC without StateError
- Add edge case tests for multiline OPENSSH/RSA private keys and varied URI protocols in SandboxSanitizer
- Add test verifying malformed UTF-8 stream decoding resilience in SandboxStderrPipe
Add LocalExtensionInstaller with path-traversal protection and policy
checks, Preferences Extensions section, and Install from file in the
Extension Manager (issue #316).
feat(settings): manual local extension install (#316)
Wire Discovery→Registration→Activation: preserve contributions in
manifests, list installed drivers in New Connection with SDUI forms,
and open schema trees through PluginRpcBridge (#318).
Expose HTTP 8123 / native 9000 with querya credentials and seed SQL
so extension drivers can be tested against a real instance.
…lback

Zip installs lose +x bits; chmod after unpack. Probe bubblewrap before
use so hosts without user namespaces still launch plugins.
Replace the activation placeholder with query/table views, wire global
SQL actions for extension connections, and improve SDUI tree/icons.
Remove unused _resolveManifest and unused imports; prefer const
constructors in catalog tests so CI flutter analyze passes.
…ation

Update expected NewSqlIntent copy and mock an empty extensions dir so
async showDriverManagerDialog settles in widget tests.
…ation

feat(extensions): register sandboxed drivers + activate via PluginRpcBridge
Bump pubspec to 0.4.10+1 and document sandboxed drivers, SDUI, updater,
and reliability fixes shipped since 0.4.9.
@ZhuchkaTriplesix
ZhuchkaTriplesix merged commit aef13b6 into main Jul 11, 2026
4 checks passed
@ZhuchkaTriplesix ZhuchkaTriplesix self-assigned this Jul 12, 2026
@ZhuchkaTriplesix
ZhuchkaTriplesix deleted the release/0.4.10 branch July 26, 2026 14:40
ZhuchkaTriplesix added a commit that referenced this pull request Jul 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant